<?php
/**
 * View_Form_TroopsSending
 *
 * Класс View_Form_TroopsSending отвечает за вывод информации, связанной с отправкой войск
 *
 * @author Дмитрий Кузьма <kouzma.d@gmail.com>
 * @version 1.0
 */
class View_Form_TroopsSending extends View_Form_Coordinates {
	
	/**
	 * Выводит непосредственно форму 
	 * 
	 * @param array $arrUnitsAvailableToGo - доступное к отправке количество юнитов
	 */
	function show(array $arrUnitsAvailableToGo) {
		$objForm = new Form_ViewForm(array(
				'errorIfExists' => true,
				'leftWidth' => 200,
				'helpUnderField' => true
		), $this);
		$objForm->show();
		$arrModelNames = array('View_Form_TroopsSending','units');
		
		$arrAllUnits = Game_Unit::getAllUnitsInfo();
		foreach ($arrAllUnits as $unitId => $arrUnitInfo) {
			$objUnit = new Game_Unit($unitId);
			$objForm->textField(
				array(
					'modelNames' => $arrModelNames, 
					'maxlength' => 3, 
					'text' => $objUnit->getName(),
					'help' => ' / ' . (isset($arrUnitsAvailableToGo[$unitId]) ? $arrUnitsAvailableToGo[$unitId] : 0),
					'disabled' => empty($arrUnitsAvailableToGo[$unitId])
				), 
				$unitId
			);
		}
		$objForm->selectField(
				array(
						//'modelNames' => $arrModelNames,
						'text' => 'Тип',
						'optionsArray' => Game_Event_UnitsMove::$availableMoveTypesWithNames
				),
				'move_type'
		);
		$this->_showCoordinatesBlock($objForm);
		
		$objForm->submitButton(array(), 'save');
		$objForm->close();
	}
	
	/**
	 * (non-PHPdoc)
	 * @see ActiveRecord::validation()
	 */
	public function validation($validationType, $arrAdditionalSettings = array()) {
		
		$this->validatesInclusionOf['move_type'] = array('available' => Game_Event_UnitsMove::$availableMoveTypes, 'message' => 'неверно выбран тип перемещени', 'on' => 'create');
		parent::validation($validationType, $arrAdditionalSettings = array());
	}
	
	
	/**
	 * Получает количество юнитов, доступных для отправки
	 *
	 * @param array $arrUnitsAvailableToGo - доступное к отправке количество юнитов
	 */
	public function getResourcesToGo(array $arrUnitsAvailableToGo) {
		$hasUnitsToGo = false; // Флаг того, что вообще кого-то отправляем
		$hasLack = false; // Флаг того, что не хватает юнитов для отправки
		$arrUnitsToGo = array();
		if (isset($this->tableFields['units'])) {
			$arrUnitsFromForm = $this->tableFields['units'];
			foreach ($arrUnitsAvailableToGo as $unitId => $unitsAvailableAmount) {
				if (!empty($arrUnitsFromForm[$unitId]) && $unitsAvailableAmount) {
					$hasUnitsToGo = true;
					$arrUnitsToGo[$unitId] = min($unitsAvailableAmount, $arrUnitsFromForm[$unitId]);
					if ($unitsAvailableAmount < $arrUnitsFromForm[$unitId]) $hasLack = true;
				}
				
			}	
		}
		$fieldToShowError = null;
		if (!$hasUnitsToGo) $this->errorValidated($fieldToShowError, array(), Service_Translate::getText('Вы не выбрали войска для отправки'));
		//if ($hasLack) $this->errorValidated($fieldToShowError, array(), Service_Translate::getText('У вас нет столько войск для отправки для отправки'));
		return $arrUnitsToGo;
	}

}
?>